package com.josh.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.josh.behavior.predict.GetPerSalesChart;
import com.josh.behavior.predict.GetPerformance;
import com.josh.behavior.predict.GetPopuSalesChart;
import com.josh.behavior.predict.GetPopularity;
import com.josh.behavior.predict.PredictResult;

public class JoshServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3167445191125392156L;

	/**
	 * Constructor of the object.
	 */
	public JoshServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the GET method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	/**
	 * The doPost method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to
	 * post.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String baseFilePath = getServletContext().getRealPath("/") + "josh"
				+ File.separator;

		// 通过上传数据获取新品关注度
		GetPerformance gPer = new GetPerformance();
		double performance = gPer.getPerformance(
				baseFilePath + "data/InputPerformance.txt").get(0);
		// 通过上传数据获取新品性能指标
		GetPopularity gPopu = new GetPopularity();
		double popularity = gPopu.getPopu(
				baseFilePath + "data/InputPopularity.txt", 1).get(0);

		// 通过以上俩个参数和上传的建模数据，预测产品销量
		PredictResult pResult = new PredictResult();
		int predictSales = 0;
		predictSales = (int) pResult
				.predictSales(baseFilePath + "data/PhonePara.txt", baseFilePath
						+ "data/WeiBoData.txt", baseFilePath
						+ "data/ProductSlaes.txt", performance, popularity);

		// 绘制Sales-Performance折线图
		GetPerSalesChart gpsc = new GetPerSalesChart();
		gpsc.perSalesChart(baseFilePath + "data/PhonePara.txt", baseFilePath
				+ "data/ProductSlaes.txt", baseFilePath
				+ "img/perSalesChart.jpg");

		// 绘制Sales-Popularity折线图
		GetPopuSalesChart gpoc = new GetPopuSalesChart();
		gpoc.popuSalesChart(baseFilePath + "data/WeiBoData.txt", baseFilePath
				+ "data/ProductSlaes.txt", baseFilePath
				+ "img/popuSalesChart.jpg");

		request.setAttribute("message", predictSales);
		request.getRequestDispatcher("/josh/result.jsp").forward(request,
				response);
	}

	/**
	 * Initialization of the servlet. <br>
	 * 
	 * @throws ServletException
	 *             if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}
